/*
* Copyright (c) 2016 ShopJsp. All Rights Reserved.
 * ============================================================================
 * 版权所有 2011 - 今 北京华宇盈通科技有限公司，并保留所有权利。
 * ----------------------------------------------------------------------------
 * 提示：在未取得SHOPJSP商业授权之前，您不能将本软件应用于商业用途，否则SHOPJSP将保留追究的权力。
 * ----------------------------------------------------------------------------
 * 官方网站：http://www.shopjsp.com
 * ============================================================================
*/
package com.hyyt.shopjsp.util.redis.service.impl;

import javax.annotation.Resource;

import org.springframework.stereotype.Service;

import com.hyyt.shopjsp.util.redis.dao.IRedisBasicDao;
import com.hyyt.shopjsp.util.redis.service.IRedisBasicService;

import java.util.List;
import java.util.Map;
import java.util.concurrent.TimeUnit;

/**
 * Redis 基础Service实现类
 *
 * @author ankang
 */
@Service("redisBasicService")
public class RedisBasicService implements IRedisBasicService {
    /**
     * Redis 基础Dao接口类
     */
    @Resource
    private IRedisBasicDao redisBasicDao;

    /**
     * 保存一个键值对数据
     *
     * @param key   键
     * @param value 值
     */
    public void setKey(final String key, final String value) {
        redisBasicDao.setKey(key, value);
    }

    /**
     * 保存一个键值对数据 同时设置过期时间
     */
    public void setKey(final String key, final String value, final long liveTime) {
        redisBasicDao.setKey(key, value, liveTime);
    }

    /**
     * 从Redis中根据key获取
     *
     * @param key 键
     * @return
     */
    public String getValue(final String key) {
        return redisBasicDao.getValue(key);
    }

    /**
     * 通过key删除一条记录
     */
    public void deleteByKey(final String key) {
        redisBasicDao.deleteByKey(key);
    }

    /**
     * 增加到zeset缓存
     *
     * @param key   键
     * @param value 值
     * @param score 过期时间，单位秒
     */
    @Override
    public Boolean addToZset(String key, String value, Long score) {
        return redisBasicDao.addToZset(key, value, score);
    }

    /**
     * 设置redis的失效时间
     *
     * @param key      键
     * @param timout   时间
     * @param timeUnit 时间单位
     */
    @Override
    public Boolean expire(String key, long timout, TimeUnit timeUnit) {
        return redisBasicDao.expire(key, timout, timeUnit);
    }

    /**
     * 删除Zset中的元素，用于控制队列大小
     *
     * @param key   键
     * @param start 开始位置
     * @param end   结束位置
     */
    @Override
    public Long removeZsetRange(String key, long start, long end) {
        return redisBasicDao.removeZsetRange(key, start, end);
    }

    /**
     * 从zset缓存中移除
     *
     * @param key   键
     * @param value 值
     */
    @Override
    public Long removeFromZset(String key, String value) {
        return redisBasicDao.removeFromZset(key, value);
    }

    /**
     * redis计数
     *
     * @param key       键
     * @param increment 每次自增数量
     */
    @Override
    public void increment(String key, Integer increment) {
        redisBasicDao.increment(key, increment);
    }

    /**
     * 设置token
     *
     * @param key   键
     * @param value 值
     */
    @Override
    public void setToken2Rredis(String key, String value) {
        redisBasicDao.setToken2Rredis(key, value);
    }

    /**
     * 从Zset中分页查询,按照分数从大到小排列
     *
     * @param key      键
     * @param pageNum  页数
     * @param pageSize 总页数
     * @return
     */
    @Override
    public List<String> getPageFromZsetByScoreDesc(String key, int pageNum, int pageSize) {
        return redisBasicDao.getPageFromZsetByScoreDesc(key, pageNum, pageSize);
    }

    /**
     * 从Zset中查询全部
     *
     * @param key 键
     * @return
     */
    @Override
    public List<String> getAllFromZset(String key) {
        return redisBasicDao.getAllFromZset(key);
    }

    /**
     * 获取zset中的分数值
     *
     * @param zsetKey 键
     * @param value   值
     * @return
     */
    @Override
    public Double score(String zsetKey, String value) {
        return redisBasicDao.score(zsetKey, value);
    }

    /**
     * 获取zset中的总数
     *
     * @param zsetKey 键
     * @return
     */
    @Override
    public Long zCard(String zsetKey) {
        return redisBasicDao.zCard(zsetKey);
    }

    /**
     * 向Redis中添加Hash
     *
     * @param key       键
     * @param hashKey   哈希键
     * @param hashValue 哈希值
     */
    @Override
    public void putToHash(String key, String hashKey, String hashValue) {
        redisBasicDao.putToHash(key, hashKey, hashValue);
    }

    /**
     * 判断Hash中是否存在key
     *
     * @param key     键
     * @param hashKey 哈希键
     * @return
     */
    @Override
    public Boolean isHashHasKey(String key, String hashKey) {
        return redisBasicDao.isHashHasKey(key, hashKey);
    }

    /**
     * 查询Hash中的全部值
     *
     * @param key 键
     * @return
     */
    @Override
    public Map getAllFromHash(String key) {
        return redisBasicDao.getAllFromHash(key);
    }

    /**
     * 从Hash中删除值
     *
     * @param key     键
     * @param hashKey 哈希键
     */
    @Override
    public void deleteFromHash(String key, String hashKey) {
        redisBasicDao.deleteFromHash(key, hashKey);
    }

}
